查看原文
其他

Python改变生活 | 批量下载B站音频,并导入音乐软件

朱小五 快学Python 2023-05-04

大家好,我是小五🧐

这是Python改变生活系列的第6篇,本系列文章主要介绍我平时在生活中,如何使用Python来提升效率,节省时间。

如果喜欢我的文章,那就点个赞支持一下吧。

今天讲解如何用Python,下载B站上的音频,并导入音乐软件,实现自定义曲库。

前情提要

为什么要这么做呢?

我经常逛B站,除了鬼畜区,音乐区也有很多up主非常喜欢。

比如飞鸟乐团。

做最好的多语种乐团 让全世界听懂中文歌!

很喜欢他们歌曲,但是这些歌曲并不会上架到各大音乐app上。

于是我就有个想法,把他们的所有歌曲音频下载下来,并放到音乐播放器中循环播放。

市面上常见的音乐播放器,大部分又都有音乐云盘功能。这为我的想法提供了进一步的可能。

整体可分为4步:

  • 爬取视频bvid
  • 下载视频
  • 转换音频
  • 导入音乐播放器

爬取视频

众所周知,B站视频的url是由以下两部分构成。

https://www.bilibili.com/video/某个bvid

其中bvid也就是常说的bv号。(去年3月份,B站的AV号就全面升级至BV号了)

如果说想要爬取B站信息,我第一时间先想到的就是——bilibili-api

https://pypi.org/project/bilibili-api/

但是等我去使用时就发现需要重新安装,再之后就怎么也安装不上。

无奈,我还是request吧。

并不复杂,F12即可轻松找到数据接口。

短短几行代码,就可以将该up主的前两页(共60个视频),所对应的bv号爬取到列表中。

bvids = []

for i in range(13):
    url = 'https://api.bilibili.com/x/space/arc/search?mid=27201651&ps=30&tid=0&pn=' + \
        str(i) + '&keyword=&order=pubdate&jsonp=jsonp'
    html = requests.get(url).content
    data = json.loads(html.decode('utf-8'))
    for j in range(30):  # 一页30个
        bvids.append(data['data']['list']['vlist'][j]['bvid'])

这样我们后面将爬取到的bv号与URL拼接起来。

就可以进行后续的爬取工作了。

'https://www.bilibili.com/video/' + str(bv号)

下载视频

开始第2步,下载视频。

与bilibili-api类似,提到下载视频,脑海里第一时间想到的就是这个轮子——you_get

一行命令行程序,提供便利的方式来下载网络上的媒体信息。

具体用法,可以查看我们之前的文章:一行代码,爬尽全网资源?

you_get部分支持范围

查询文档。

发现只能下载B站的视频,而不能下载音频。

这样就只能选择先下载视频,后续再加一步,将视频转换成音频

由于都是在命令行中使用,所以在Python 上调用的话,需要用到 syssys.argv

具体用法:

def download_flv(url):
    directory = r'D:\test'
    sys.argv = ['you-get''-o', directory, '--format=flv', url]
    you_get.main()

for i in bvids:
    url = 'https://www.bilibili.com/video/' + str(i)
    download_flv(url)

执行后,具体效果如下图所示。

这样在D:\test目录下,就有了60个flv格式的视频文件。

转换音频

在这一步,我们需要把视频转换成音频文件。

首先要先给大家介绍一个新模块。

MoviePy是一个用于视频编辑的python模块,你可以用它实现一些基本的操作(比如视频剪辑,视频拼接,插入标题),还可以实现视频合成,还有视频处理,抑或用它加入一些自定义的高级的特效。

通过对比,该模块能够生成的音频文件和,网易云音乐支持导入的音频文件。只有wav和mp3两种格式是最合适的。

其中WAVE是录音时用的标准的WINDOWS文件格式,文件的扩展名为“wav”,数据本身的格式为PCM或压缩型,属于无损音乐格式的一种。所以WAV文件相对于MP3文件比较大。

既然云盘空间很大,那就无损走起。

from moviepy.editor import *
import os

mp4names = os.listdir(r'D:\test')
for i in mp4names:
    if os.path.splitext(i)[-1]=='.flv':
        video = VideoFileClip(i)
        audio = video.audio
        audio.write_audiofile(os.path.splitext(i)[0]+ '.mp3')

os模块遍历文件,moviepy负责转换视频/音频格式。

执行后,具体效果如下图所示。

这样在D:\test目录下,就又多了60个wav格式的音频文件。

播放效果

这一步,我们将音频文件导入音乐播放器并查看效果。

我的音乐云盘

导入后需要进行转码,耐心等待一会儿。

再将这些歌曲,放入到你自己的各种歌单中。

播放音乐🎵

静静享受,劳动的果实🎶

如果想看更多Python改变生活的真实问题案例,就给本文右下角点个赞,支持一下吧👍

大家如果本文涉及的代码感兴趣,可以扫描下面二维码👇在【快学Python】后台回复“音频”即可获取对应代码文件。

 

推荐阅读    点击标题可跳转

1、 梦幻风图片? 我用Python分分钟做出来!

2、 总结了14个Pandas函数,轻松进行数据处理!

3、 2行Python给图片加水印,太强了!

点击这里阅读更多Python文章

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存